package Week2.J0423;

// 思路1: 递归 查找+1或-1等于所查下标的数
// 运算正确, 但超时
// 思路2: 先排序, 有序读取，不用回头

import java.util.Arrays;

public class 数组中的最长连续子序列_xv {
    public int MLS(int[] arr) {
        Arrays.sort(arr);
        int count = 0;
        int ret = 0;
        for (int i = 0; i < arr.length;) {
            int j = i+1;
            count = 1;
            while (j < arr.length) {
                if (i > 0 && arr[j] - arr[i] == 1) {
                    count++;
                    j++;
                } else if (arr[j] - arr[i] == 0) {
                    j++;
                }else break;
            }
            ret = Math.max(ret, count);
            i = j;
        }
        return count;
    }


//    int count = 0;
//    int counted = 0;
//    Queue<Integer> queue1 = new LinkedList<>();
////    Queue<Integer> queue2 = new LinkedList<>();
//
//    public int MLS (int[] arr) {
//        boolean[] isVis = new boolean[arr.length];
//
//        for (int i = 0; i < arr.length; i++) {
//            if (!isVis[i]) {
//                queue1.offer(arr[i]);
//                isVis[i] = true;
//                count++;
//            }
//            find(i, arr, isVis);
//            if (count >= counted) {
//                counted = count;
//                count = 0;
//                while (!queue1.isEmpty()) {
//                    queue1.poll();
//                }
//            }
//        }
//        return counted;
//    }
//
//    private int find(int i, int[] arr, boolean[] isVis) {
//        if (i > arr.length-1) return count;
//
//        for (int j = 0; j < arr.length; j++) {
//            if ((queue1.contains(arr[j]+1) || queue1.contains(arr[j]-1)) && !isVis[j]) {
//                queue1.offer(arr[j]);
//                isVis[j] = true;
//                count++;
//                find(j, arr, isVis);
//            }
//        }
//        return count;
//    }
}
